package com.fjwt.gz.db.config.dynamic;

import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;

/**
* 动态数据源 和 管理类
*
* @author wg
* @site https://pt.jdyd.xyz/
* @date 2022/3/8 9:29
*/
public class DynamicDataSource extends AbstractRoutingDataSource {

    /** 数据源枚举值  主 / 从 */
    public enum DataSourceTypeEnum { MASTER, SLAVE }

    public static final DataSourceTypeEnum MASTER = DataSourceTypeEnum.MASTER;
    public static final DataSourceTypeEnum SLAVE = DataSourceTypeEnum.SLAVE;

    //当前线程 用于存放使用中的数据源
    private static final ThreadLocal<DataSourceTypeEnum> CURRENT_DATA_SOURCE = new ThreadLocal<>();

    /**
     * 设置使用数据源
     * @param dataSource
     */
    public static void setDataSource(DataSourceTypeEnum dataSource){
        CURRENT_DATA_SOURCE.set(dataSource);
    }

    /**
     * 获取当前数据源
     * @return DataSourceTypeEnum
     */
    public static DataSourceTypeEnum getCurrentDataSource(){
        return CURRENT_DATA_SOURCE.get();
    }

    /**
     * 清空使用数据源, 使用默认数据源
     */
    public static void clear(){
        CURRENT_DATA_SOURCE.remove();
    }

    /** 覆写 determineCurrentLookupKey 函数 **/
    @Override
    protected Object determineCurrentLookupKey() {
        return DynamicDataSource.getCurrentDataSource();
    }

}
